package com.yuw.stringdemo;

public class StringTest {

	public static void main(String[] args) {
		test02();
	}

	/**
	 * StringBuilder类的用法
	 */
	private static void test03() {
		// 创建一个StringBuilder类的实例对象
		StringBuilder sb = new StringBuilder("小明");
		// 进行字符串拼接操作
		sb.append(" ");
		sb.append("，你好，").append("你上课睡觉了么").append("?");
		//将StringBuilder转换为String类
		String str = sb.toString();
	}

	/**
	 * ==和equals的区别
	 */
	private static void test02() {
		// 变量1
		String str00 = new String("小明"); // 执行到此行，创建了2个对象 1个在字符串常量池中，1个在堆内存中
		String str01 = new String("小明"); // 执行到此行，创建了3个对象 1个在字符串常量池中，2个在堆内存中
		String str02 = "小明"; // 字符串常量// 执行到此行，创建了3个对象 一个在字符串常量池中，一个在堆内存中
		String str03 = "小明";// 执行到此行，创建了3个对象 一个在字符串常量池中，一个在堆内存中
		String str041 = "小";
		String str04 = str041 + "明"; // 执行到此，创建了6个对象 3个在字符串常量池中，3个在堆内存中
		// 如果两个纯粹字符创常量直接相加，则还是字符串常量，初次以外其他情况则需要开辟堆内存；
		// String str04 = "小" + "明";

		System.out.println("str00 == str01:" + (str00 == str01)); // false
		System.out.println("str00.equals(str01):" + (str00.equals(str01)));// true

		System.out.println("str00 == str02:" + (str00 == str02)); // false
		System.out.println("str00.equals(str02):" + (str00.equals(str02)));// true

		System.out.println("str02 == str03:" + (str02 == str03)); // true
		System.out.println("str02.equals(str03):" + (str02.equals(str03)));// true

		System.out.println("str04 == str00:" + (str04 == str00)); // false
		System.out.println("str04.equals(str00):" + (str04.equals(str00)));// true

		System.out.println("str04 == str02:" + (str04 == str02)); // false
		System.out.println("str04.equals(str02):" + (str04.equals(str02)));// true
	}

	/**
	 * String类常用的方法
	 */
	private static void test01() {
		// 创建一个String类型的变量
		String str00 = "kjflkjdsa;fjoewroi32jrlksjkfjdslkfj;lsa";
		// charAt方法
		// char ch = str00[i]; //charAt方法实现此功能

		char ch = str00.charAt(0);
		System.out.println("索引为0的字符：" + ch);
		System.out.println("使用for循环+chaAt方法遍历字符串中的每一个字符:");
		// 使用for循环+chaAt方法遍历字符串中的每一个字符
		for (int i = 0; i < str00.length(); i++) {
			System.out.println(" " + str00.charAt(i));
		}

		System.out.println("======================");
		boolean isIn = str00.contains("fjoewro");
		System.out.println("contains用法：" + isIn);

		System.out.println("======================");

		int iIn = str00.indexOf("fjoewro");
		System.out.println("indexOf用法：" + iIn);

		System.out.println("======================");
		String strNew = str00.replace("a;", "**");
		System.out.println("str00:" + str00);
		System.out.println("strNew:" + strNew);

		System.out.println("======================");
		String strSub = str00.substring(4, 8); // kjds【8-4=4】 子串的长度为：8-4
		str00.substring(4);
		// str00.substring(4, 10000); // 越界，因为结束位置不能大于最大索引
		System.out.println("strSub:" + strSub);

		System.out.println("隐藏手机号码的中间四位：");
		String strTel = "18812345678";
		String strTelNew = strTel.replace(strTel.substring(3, 7), "****");
		System.out.println("strTelNew:" + strTelNew);

		System.out.println("=====================");
		String str01 = "  jkljlkj jlkjlk jlkjl     ";
		System.out.println("str01:" + str01);
		System.out.println("str01.trim():" + str01.trim()); // 提出前后的空白字符
		// split方法应用
		String[] strSubs = str00.split(";");
		System.out.println("分割的结果是：");
		if (strSubs != null && strSubs.length > 0) {
			for (int i = 0; i < strSubs.length; i++) {
				System.out.println(" " + strSubs[i]);
			}
		}
	}

}
